package ren.wxyz.algorithm.dsaj2.chap02;

/**
 * 更高层次的抽象
 * 
 * @author zxwang
 * @dateTime 2014年12月19日 下午4:25:19
 */
public class HighArray {

	private long[] a;
	/**
	 * 实际的元素数
	 */
	private int nElems;

	public HighArray(int max) {
		this.a = new long[max];
		nElems = 0;
	}

	/**
	 * 查找
	 * 
	 * @param searchKey
	 * @return
	 */
	public boolean find(long searchKey) {
		int j;

		for (j = 0; j < nElems; j++) {
			if (a[j] == searchKey) {
				break;
			}
		}

		if (j == nElems) {
			return false;
		}

		return true;
	}

	/**
	 * 插入
	 * 
	 * @param value
	 */
	public boolean insert(long value) {
		if (nElems == a.length) {
			return false;
		}

		a[nElems] = value;
		nElems++;

		return true;
	}

	/**
	 * 删除
	 * 
	 * @param value
	 * @return
	 */
	public boolean delete(long value) {
		int j;
		for (j = 0; j < nElems; j++) {
			if (value == a[j]) {
				break;
			}
		}

		if (j == nElems) {
			return false;
		}
		else {
			nElems--;
			for (int k = j; k < nElems; k++) {
				a[k] = a[k + 1];
			}

			return true;
		}

	}

	public void display() {
		for (int j = 0; j < nElems; j++) {
			System.out.print(a[j] + " ");
		}
		System.out.println();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int maxSize = 100;
		HighArray arr = new HighArray(maxSize);
		// 插入10个项
		arr.insert(77);
		arr.insert(99);
		arr.insert(44);
		arr.insert(55);
		arr.insert(22);
		arr.insert(88);
		arr.insert(11);
		arr.insert(00);
		arr.insert(66);
		arr.insert(33);
		
		arr.display();
		
		int searchKey = 35;
		if (arr.find(searchKey)) {
			System.out.println("Found " + searchKey);
		}
		else {
			System.out.println("Can't find " + searchKey);
		}
		
		arr.delete(00);
		arr.delete(55);
		arr.delete(99);
		
		arr.display();
	}

}
